package com.youth.koodoReaderManager.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Data // Lombok注解，生成getter、setter等方法
@Accessors(chain = true) // Lombok注解，支持链式调用
@TableName("koodo_note") // MyBatis Plus注解，指定映射的数据库表名
public class Note {
    @TableId(value = "key", type = IdType.AUTO) // MyBatis Plus注解，指定主键字段和生成策略
    @ApiModelProperty(value = "笔记的唯一键", required = true) // Swagger注解，描述字段
    private Integer key;

    @ApiModelProperty(value = "笔记所在的书籍的键值") // Swagger注解，描述字段
    private Integer bookKey;

    @ApiModelProperty(value = "笔记的添加日期") // Swagger注解，描述字段
    private Date date;

    @ApiModelProperty(value = "笔记的所在章节") // Swagger注解，描述字段
    private String chapter;

    @ApiModelProperty(value = "笔记的所在章节索引") // Swagger注解，描述字段
    private Integer chapterIndex;

    @ApiModelProperty(value = "笔记对应的书本内容") // Swagger注解，描述字段
    private String text;

    @ApiModelProperty(value = "添加笔记的位置") // Swagger注解，描述字段
    private String cfi;

    @ApiModelProperty(value = "Rangy.js产生的将Range对象序列化后的字符串") // Swagger注解，描述字段
    private String range;

    @ApiModelProperty(value = "笔记内容") // Swagger注解，描述字段
    private String notes;

    @ApiModelProperty(value = "笔记在文中的进度") // Swagger注解，描述字段
    private Double percentage;

    @ApiModelProperty(value = "笔记高亮的颜色") // Swagger注解，描述字段
    private Integer color;

    @ApiModelProperty(value = "笔记的标签") // Swagger注解，描述字段
    private List<String> tag;

    public Note(Integer bookKey, String chapter, Integer chapterIndex, String text, String cfi, String range, String notes, Double percentage, Integer color, List<String> tag) {
        this.bookKey = bookKey;
        this.date = new Date(); // 初始化日期
        this.chapter = chapter;
        this.chapterIndex = chapterIndex;
        this.text = text;
        this.cfi = cfi;
        this.range = range;
        this.notes = notes != null ? notes : ""; // 如果notes为null，则赋予空字符串
        this.percentage = percentage;
        this.color = color;
        this.tag = tag != null ? tag : new ArrayList<>(); // 如果tag为null，则初始化为空列表
    }

    // 构造函数、getter和setter方法 (由Lombok的@Data注解自动生成)
}